package org.example.flea_market_mvc.service.products;

import org.example.flea_market_mvc.entity.Products;
import org.example.flea_market_mvc.entity.PageInfo;
import org.example.flea_market_mvc.param.ProductParam;

import java.util.List;

/**
 * 商品服务接口
 * 处理商品管理业务逻辑，包括商品上架、下架、查询等
 */
public interface ProductsService {

    /**
     * 插入新商品记录
     * @param productParam 商品参数对象
     * @return 插入成功返回1，失败返回0
     */
    int insert(ProductParam productParam);

    /**
     * 根据商品ID删除商品记录
     * @param id 商品ID
     * @return 删除成功返回1，失败返回0
     */
    int deleteById(Integer id);

    /**
     * 更新商品记录
     * @param productParam 商品参数对象（含更新信息）
     * @return 更新成功返回1，失败返回0
     */
    int update(Products productParam);

    /**
     * 根据商品ID查询商品记录
     * @param id 商品ID
     * @return 商品实体对象，未找到返回null
     */
    Products selectById(Integer id);

    /**
     * 查询所有商品记录
     * @return 商品实体列表
     */
    List<Products> selectAll();

    /**
     * 分页查询商品
     * @param pageNum 页码(从1开始)
     * @param pageSize 每页数量
     * @return 分页结果
     */
    PageInfo<Products> selectByPage(int pageNum, int pageSize);

    /**
     * 按分类分页查询商品
     * @param categoryId 分类ID
     * @param pageNum 页码(从1开始)
     * @param pageSize 每页数量
     * @return 分页结果
     */
    PageInfo<Products> selectByCategory(int categoryId, int pageNum, int pageSize);

    /**
     * 条件分页查询商品
     * @param param 查询参数，包含分页信息
     * @return 分页结果
     */
    PageInfo<Products> selectPage(ProductParam param);

    /**
     * 商品上架
     */
    int upProduct(Integer id);

    /**
     * 商品下架
     */
    int downProduct(Integer id);

    /**
     * 商品审核
     */
    int auditProduct(Integer id, Integer status);

    /**
     * 强制下架商品
     */
    int forceDownProduct(Integer id);
//修改状态
    int upDataProductStatus(Integer id, Integer status);
}